| /* |
| * Copyright (C) 2016 Google Inc. |
| * |
| * 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 com.googlecode.android_scripting.activity; |
| |
| import android.app.ListActivity; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.database.DataSetObserver; |
| import android.os.Bundle; |
| import android.os.Parcelable; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.BaseAdapter; |
| import android.widget.ImageView; |
| import android.widget.LinearLayout; |
| import android.widget.ListView; |
| import android.widget.TextView; |
| |
| import com.googlecode.android_scripting.BaseApplication; |
| import com.googlecode.android_scripting.FeaturedInterpreters; |
| import com.googlecode.android_scripting.IntentBuilders; |
| import com.googlecode.android_scripting.R; |
| import com.googlecode.android_scripting.interpreter.Interpreter; |
| import com.googlecode.android_scripting.interpreter.InterpreterConfiguration; |
| import com.googlecode.android_scripting.interpreter.InterpreterConfiguration.ConfigurationObserver; |
| |
| import java.util.List; |
| |
| /** |
| * Presents available scripts and returns the selected one. |
| * |
| * @author Damon Kohler (damonkohler@gmail.com) |
| */ |
| public class InterpreterPicker extends ListActivity { |
| |
| private List<Interpreter> mInterpreters; |
| private InterpreterPickerAdapter mAdapter; |
| private InterpreterConfiguration mConfiguration; |
| private ScriptListObserver mObserver; |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| CustomizeWindow.requestCustomTitle(this, "Interpreters", R.layout.script_manager); |
| mObserver = new ScriptListObserver(); |
| mConfiguration = ((BaseApplication) getApplication()).getInterpreterConfiguration(); |
| mInterpreters = mConfiguration.getInteractiveInterpreters(); |
| mConfiguration.registerObserver(mObserver); |
| mAdapter = new InterpreterPickerAdapter(); |
| mAdapter.registerDataSetObserver(mObserver); |
| setListAdapter(mAdapter); |
| } |
| |
| @Override |
| protected void onListItemClick(ListView list, View view, int position, long id) { |
| final Interpreter interpreter = (Interpreter) list.getItemAtPosition(position); |
| if (Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) { |
| int icon = |
| FeaturedInterpreters.getInterpreterIcon(InterpreterPicker.this, interpreter |
| .getExtension()); |
| if (icon == 0) { |
| icon = R.drawable.sl4a_logo_48; |
| } |
| Parcelable iconResource = |
| Intent.ShortcutIconResource.fromContext(InterpreterPicker.this, icon); |
| Intent intent = IntentBuilders.buildInterpreterShortcutIntent(interpreter, iconResource); |
| setResult(RESULT_OK, intent); |
| } |
| finish(); |
| } |
| |
| @Override |
| protected void onDestroy() { |
| super.onDestroy(); |
| mConfiguration.unregisterObserver(mObserver); |
| } |
| |
| private class ScriptListObserver extends DataSetObserver implements ConfigurationObserver { |
| @Override |
| public void onInvalidated() { |
| mInterpreters = mConfiguration.getInteractiveInterpreters(); |
| } |
| |
| @Override |
| public void onConfigurationChanged() { |
| mAdapter.notifyDataSetInvalidated(); |
| } |
| } |
| |
| private class InterpreterPickerAdapter extends BaseAdapter { |
| |
| @Override |
| public int getCount() { |
| return mInterpreters.size(); |
| } |
| |
| @Override |
| public Object getItem(int position) { |
| return mInterpreters.get(position); |
| } |
| |
| @Override |
| public long getItemId(int position) { |
| return position; |
| } |
| |
| @Override |
| public View getView(int position, View convertView, ViewGroup parent) { |
| LinearLayout container; |
| |
| Interpreter interpreter = mInterpreters.get(position); |
| |
| if (convertView == null) { |
| LayoutInflater inflater = |
| (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
| container = (LinearLayout) inflater.inflate(R.layout.list_item, null); |
| } else { |
| container = (LinearLayout) convertView; |
| } |
| ImageView img = (ImageView) container.findViewById(R.id.list_item_icon); |
| |
| int imgId = |
| FeaturedInterpreters.getInterpreterIcon(InterpreterPicker.this, interpreter |
| .getExtension()); |
| if (imgId == 0) { |
| imgId = R.drawable.sl4a_logo_32; |
| } |
| |
| img.setImageResource(imgId); |
| |
| TextView text = (TextView) container.findViewById(R.id.list_item_title); |
| |
| text.setText(interpreter.getNiceName()); |
| return container; |
| } |
| } |
| } |