Android Open Source - K6nele App List Cursor Adapter






From Project

Back to project page K6nele.

License

The source code is released under:

Apache License

If you think the Android project K6nele listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011, Institute of Cybernetics at Tallinn University of Technology
 *//w w  w.  j a  v  a2  s .c  om
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ee.ioc.phon.android.speak;

import ee.ioc.phon.android.speak.provider.App;
import ee.ioc.phon.android.speak.provider.Grammar;
import ee.ioc.phon.android.speak.provider.Server;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * <p>Frontend that merges data from three database tables (Apps, Grammars, Servers)
 * and presents it in one list.</p>
 * 
 * @author Kaarel Kaljurand
 */
public class AppListCursorAdapter extends CursorAdapter {

  private String mDefaultServerUrl;
  private PackageManager mPm;

  public AppListCursorAdapter(Context context, Cursor c, boolean autoRequery) {
    super(context, c, autoRequery);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    mDefaultServerUrl = prefs.getString(context.getString(R.string.keyServerHttp), context.getString(R.string.defaultServerHttp));
    mPm = context.getPackageManager();
  }


  @Override
  public void bindView(View view, Context context, Cursor c) {
    String packageName = c.getString(c.getColumnIndex(App.Columns.FNAME));

    String label = "";
    Drawable icon = null;
    try {
      label = mPm.getApplicationLabel(mPm.getApplicationInfo(packageName, 0)).toString();
      if (icon == null) {
        icon = mPm.getApplicationIcon(packageName);
      }
    } catch (NameNotFoundException e) { }

    // App label which can be "" if the app has been uninstalled.
    TextView itemAppName = (TextView) view.findViewById(R.id.itemAppName);
    itemAppName.setText(label);

    // App package name (comes from the DB)
    TextView itemAppFname = (TextView) view.findViewById(R.id.itemAppFname);
    itemAppFname.setText(packageName);

    // App usage count (comes from the DB)
    TextView itemAppCount = (TextView) view.findViewById(R.id.itemAppCount);
    itemAppCount.setText("" + c.getInt(c.getColumnIndex(App.Columns.COUNT)));

    // App icon (can be null if the app has been uninstalled)
    ImageView itemAppIcon = (ImageView) view.findViewById(R.id.itemAppIcon);
    if (icon == null) {
      itemAppIcon.setVisibility(View.INVISIBLE);
    } else {
      itemAppIcon.setVisibility(View.VISIBLE);
      itemAppIcon.setImageDrawable(icon);
    }

    // Grammar URL assigned to the app (comes from the DB)
    TextView itemAppGrammar = (TextView) view.findViewById(R.id.itemAppGrammar);
    TextView itemAppGrammarTargetLang = (TextView) view.findViewById(R.id.itemAppGrammarTargetLang);
    long grammarId = c.getLong(c.getColumnIndex(App.Columns.GRAMMAR));

    String grammarUrl = Utils.idToValue(context, Grammar.Columns.CONTENT_URI, Grammar.Columns._ID, Grammar.Columns.URL, grammarId);
    String grammarTargetLang = Utils.idToValue(context, Grammar.Columns.CONTENT_URI, Grammar.Columns._ID, Grammar.Columns.LANG, grammarId);

    if (grammarUrl == null) {
      // This can happen in two cases:
      // 1. The app has not been assigned a grammar
      // 2. The app had a grammar but it was deleted
      // (with a foreign key constraint in place the 2nd option would
      // merged into the 1st, but until then we would simply have
      // an id that can never apply anymore).
      itemAppGrammar.setVisibility(View.GONE);
      itemAppGrammarTargetLang.setVisibility(View.GONE);
    } else if (grammarUrl.length() == 0) {
      // This can happen if the user wants to use unrestricted
      // input with this app, and has assigned a grammar URL which
      // is an empty string. This this case the target language makes no sense.
      itemAppGrammar.setVisibility(View.VISIBLE);
      itemAppGrammarTargetLang.setVisibility(View.GONE);
      itemAppGrammar.setText(context.getString(R.string.entryGrammarName1));
    } else {
      itemAppGrammar.setVisibility(View.VISIBLE);
      itemAppGrammarTargetLang.setVisibility(View.VISIBLE);
      itemAppGrammar.setText(grammarUrl);
      itemAppGrammarTargetLang.setText(grammarTargetLang);
    }

    // Server URL assigned to the app (comes from the DB)
    TextView itemAppServer = (TextView) view.findViewById(R.id.itemAppServer);
    long serverId = c.getLong(c.getColumnIndex(App.Columns.SERVER));

    String serverUrl = Utils.idToValue(context, Server.Columns.CONTENT_URI, Server.Columns._ID, Server.Columns.URL, serverId);

    if (serverUrl == null) {
      itemAppServer.setVisibility(View.GONE);
    } else {
      itemAppServer.setVisibility(View.VISIBLE);
      if (serverUrl.equals(mDefaultServerUrl)) {
        itemAppServer.setTextColor(context.getResources().getColor(R.color.green3));
      } else {
        itemAppServer.setTextColor(context.getResources().getColor(R.color.orange));
      }
      itemAppServer.setText(serverUrl);
    }
  }


  @Override
  public View newView(Context context, Cursor c, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(context);
    return inflater.inflate(R.layout.list_item_app, parent, false);
  }
}




Java Source Code List

ee.ioc.phon.android.speak.AboutActivity.java
ee.ioc.phon.android.speak.AppListActivity.java
ee.ioc.phon.android.speak.AppListCursorAdapter.java
ee.ioc.phon.android.speak.AudioCue.java
ee.ioc.phon.android.speak.AudioPauser.java
ee.ioc.phon.android.speak.Caller.java
ee.ioc.phon.android.speak.ChunkedWebRecSessionBuilder.java
ee.ioc.phon.android.speak.Constants.java
ee.ioc.phon.android.speak.DetailsActivity.java
ee.ioc.phon.android.speak.ExecutableString.java
ee.ioc.phon.android.speak.Executable.java
ee.ioc.phon.android.speak.Extras.java
ee.ioc.phon.android.speak.GetLanguageDetailsReceiver.java
ee.ioc.phon.android.speak.GrammarListActivity.java
ee.ioc.phon.android.speak.Log.java
ee.ioc.phon.android.speak.MicButton.java
ee.ioc.phon.android.speak.OnSwipeTouchListener.java
ee.ioc.phon.android.speak.PackageNameRegistry.java
ee.ioc.phon.android.speak.PreferencesRecognitionServiceHttp.java
ee.ioc.phon.android.speak.PreferencesRecognitionServiceWs.java
ee.ioc.phon.android.speak.Preferences.java
ee.ioc.phon.android.speak.RawAudioRecorder.java
ee.ioc.phon.android.speak.RecognizerIntentActivity.java
ee.ioc.phon.android.speak.RecognizerIntentListActivity.java
ee.ioc.phon.android.speak.RecognizerIntentService.java
ee.ioc.phon.android.speak.RecognizerIntent.java
ee.ioc.phon.android.speak.ServerListActivity.java
ee.ioc.phon.android.speak.SpeechRecognitionService.java
ee.ioc.phon.android.speak.Utils.java
ee.ioc.phon.android.speak.VoiceImeService.java
ee.ioc.phon.android.speak.VoiceImeView.java
ee.ioc.phon.android.speak.WebSocketRecognizer.java
ee.ioc.phon.android.speak.WebSocketResponse.java
ee.ioc.phon.android.speak.demo.AbstractRecognizerDemoActivity.java
ee.ioc.phon.android.speak.demo.ExtrasDemo.java
ee.ioc.phon.android.speak.demo.RepeaterDemo.java
ee.ioc.phon.android.speak.demo.SimpleDemo.java
ee.ioc.phon.android.speak.demo.VoiceSearchDemo.java
ee.ioc.phon.android.speak.provider.App.java
ee.ioc.phon.android.speak.provider.AppsContentProvider.java
ee.ioc.phon.android.speak.provider.BaseColumnsImpl.java
ee.ioc.phon.android.speak.provider.FileContentProvider.java
ee.ioc.phon.android.speak.provider.Grammar.java
ee.ioc.phon.android.speak.provider.Server.java