Index: demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
diff --git a/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7450c60347722b8d3d9af41610daf169891ccece |
--- /dev/null |
+++ b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
@@ -0,0 +1,257 @@ |
+// Copyright 2015 Google Inc. All Rights Reserved. |
Ian Wen
2016/02/09 00:14:15
2016
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+// |
+// 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 org.chromium.customtabsdemos; |
+ |
+import android.app.ActionBar; |
+import android.app.Dialog; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.graphics.Bitmap; |
+import android.net.Uri; |
+import android.os.Bundle; |
+import android.provider.MediaStore; |
+import android.support.v7.app.AppCompatActivity; |
+import android.view.LayoutInflater; |
+import android.view.View; |
+import android.widget.ArrayAdapter; |
+import android.widget.Button; |
+import android.widget.EditText; |
+import android.widget.ImageView; |
+import android.widget.LinearLayout; |
+import android.widget.Spinner; |
+import android.widget.TextView; |
+import org.chromium.customtabsclient.shared.CustomTabsHelper; |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * Advanced UI setting. |
Ian Wen
2016/02/09 00:14:15
An activity for advanced UI settings.
|
+ */ |
+public class AdvancedUISettingActivity extends AppCompatActivity implements View.OnClickListener{ |
+ private Spinner mToolbarColorSpinner; |
+ private Spinner mPackageSpinner; |
+ private Button mSaveButton; |
+ private Button mAddActionBarItemButton; |
+ private List<String> packageNameList; |
+ private String packageName; |
+ private String color; |
Ian Wen
2016/02/09 00:14:15
All memeber variables should start with an "m".
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ private Dialog addActionBarItemDialogue; |
Ian Wen
2016/02/09 00:14:15
Use Dialog instead of Dialogue. Our names are long
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ |
+ private int PICK_IMAGE_REQUEST = 1; |
Ian Wen
2016/02/09 00:14:15
Make this a static final and move it before dynami
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ private Uri imageInAddItemDialogue; |
Ian Wen
2016/02/09 00:14:15
This is a uri, not a dialog.
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ private ArrayList<String> actionBarItemsDescription; |
+ private ArrayList<Uri> actionBarItemsImage; |
+ private ArrayList<String> actionBarItemsIntent; |
+ |
+ @Override |
+ protected void onCreate(Bundle savedInstanceState) { |
+ super.onCreate(savedInstanceState); |
+ setContentView(R.layout.advanced_ui_setting); |
+ mToolbarColorSpinner = (Spinner) findViewById(R.id.spinner_color); |
+ mPackageSpinner = (Spinner) findViewById(R.id.spinner_package); |
+ mSaveButton = (Button) findViewById(R.id.save_setting); |
+ mAddActionBarItemButton = (Button) findViewById(R.id.add_actionbar_item); |
+ packageNameList = (List<String>) getIntent().getSerializableExtra("packageNameList"); |
Ian Wen
2016/02/09 00:14:15
Make these strings (eg "packageNameList") public c
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ packageName = getIntent().getStringExtra("packageName"); |
+ color = getIntent().getStringExtra("color"); |
+ actionBarItemsDescription = (ArrayList<String>) getIntent() |
+ .getSerializableExtra("itemsDescription"); |
+ actionBarItemsIntent = (ArrayList<String>) getIntent() |
+ .getSerializableExtra("itemsIntent"); |
+ actionBarItemsImage = (ArrayList<Uri>) getIntent() |
+ .getSerializableExtra("itemsImage"); |
+ mSaveButton.setOnClickListener(this); |
+ mAddActionBarItemButton.setOnClickListener(this); |
+ mToolbarColorSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row, |
+ R.id.item, |
+ CustomTabsHelper.getColors())); |
+ |
+ mPackageSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row, |
Ian Wen
2016/02/09 00:14:15
Use android.R.layout.simple_spinner_dropdown_item
BigBossZhiling
2016/02/09 01:03:11
I tried R.layout.simple_spinner_dropdown_item, but
|
+ R.id.item, packageNameList)); |
+ |
+ // Select UI setting previously set by the user. |
+ // If first time, select default UI setting from Custom UI Activity. |
+ selectUISetting(); |
+ } |
+ |
+ @Override |
+ public void onClick(View view) { |
+ switch (view.getId()) { |
+ case R.id.save_setting: |
+ sendUISettingToUIActivity(); |
+ finish(); |
+ break; |
+ case R.id.add_actionbar_item: |
+ addActionBarItemDialogue(); |
+ break; |
+ case R.id.save_item: |
+ saveActionBarItem(); |
+ // Only add the last item to the UI. |
+ displayActionBarItems(actionBarItemsDescription.size() - 1, |
+ actionBarItemsDescription.size()); |
+ addActionBarItemDialogue.dismiss(); |
+ break; |
+ case R.id.cancel: |
+ addActionBarItemDialogue.dismiss(); |
+ break; |
+ case R.id.select_file: |
+ selectFile(); |
+ break; |
+ case R.id.item_delete: |
+ deleteItem(view); |
+ break; |
+ } |
+ } |
+ |
+ @Override |
+ public void onActivityResult(int requestCode, int resultCode, Intent data) { |
+ super.onActivityResult(requestCode, resultCode, data); |
+ if ((requestCode == PICK_IMAGE_REQUEST)) { |
+ try { |
+ Uri uri = data.getData(); |
+ imageInAddItemDialogue = uri; |
+ ImageView image = (ImageView) addActionBarItemDialogue |
+ .findViewById(R.id.imageInDialogue); |
+ image.setImageBitmap(uriToBitMap(this, imageInAddItemDialogue)); |
+ image.requestLayout(); |
+ } catch (Exception e) { |
+ e.printStackTrace(); |
+ } |
+ } |
+ } |
+ |
+ // Put uri, instead of Bitmap in intent to save space. |
Ian Wen
2016/02/09 00:14:15
Switch to javadoc and use "Puts" instead of "put".
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ static Bitmap uriToBitMap(Context context, Uri uri) { |
Ian Wen
2016/02/09 00:14:15
Static methods should be placed before dynamic met
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ try { |
+ return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri); |
+ } catch (Exception e) { |
+ return null; |
+ } |
+ } |
+ |
+ /** |
+ * Display of items stored in the arraylist from index startIndex to endInde. |
Ian Wen
2016/02/09 00:14:16
endInde. Typo.
Ian Wen
2016/02/09 00:14:16
Displays items......
BigBossZhiling
2016/02/09 01:03:11
Done.
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ * @param startIndex is the starting index. |
+ * @param endIndex is the ending index. |
+ */ |
+ private void displayActionBarItems(int startIndex, int endIndex) { |
+ LayoutInflater inflater = (LayoutInflater)getBaseContext() |
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
+ LinearLayout setting = (LinearLayout) findViewById(R.id.advanced_ui_setting_linear_layout); |
+ // Start position is the index in the layout to add action bar item |
+ // Start position is the third last index. |
+ int startPosition = setting.getChildCount() - 2; |
+ for (int i = startIndex; i < endIndex; i++) { |
+ View item = inflater.inflate(R.layout.display_action_bar_item_setting, null); |
+ ((TextView) item.findViewById(R.id.item_description)) |
+ .setText("Description: " + actionBarItemsDescription.get(i)); |
+ ((TextView) item.findViewById(R.id.item_intent)) |
+ .setText("Intent: " + actionBarItemsIntent.get(i)); |
+ ((TextView) item.findViewById(R.id.item_image_title)).setText("Image: "); |
+ ImageView image = (ImageView) item.findViewById(R.id.item_image); |
+ image.setImageBitmap(uriToBitMap(this, actionBarItemsImage.get(i))); |
+ Button deleteButton = (Button) item.findViewById(R.id.item_delete); |
+ deleteButton.setOnClickListener(this); |
+ setting.addView(item, startPosition); |
Ian Wen
2016/02/09 00:14:15
You can directly say addView, without giving it a
BigBossZhiling
2016/02/09 01:03:11
Yes I can, but I think I don't want to add the vie
|
+ startPosition += 1; |
+ |
Ian Wen
2016/02/09 00:14:15
Remove empty line.
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ } |
+ } |
+ |
+ private void selectFile() { |
+ Intent intent = new Intent(); |
+ intent.setType("image/*"); |
+ intent.setAction(Intent.ACTION_OPEN_DOCUMENT); |
+ startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); |
+ } |
+ |
+ private void deleteItem(View deleteButton) { |
+ LinearLayout buttonLayout = (LinearLayout) deleteButton.getParent(); |
+ LinearLayout lineLayout = (LinearLayout) buttonLayout.getParent(); |
+ LinearLayout itemLayout = (LinearLayout) lineLayout.getParent(); |
+ LinearLayout settingLayout = (LinearLayout) itemLayout.getParent(); |
+ int index = getIndexOfLayout(R.id.actiona_bar_item, itemLayout, settingLayout); |
+ settingLayout.removeView(itemLayout); |
+ actionBarItemsDescription.remove(index); |
+ actionBarItemsImage.remove(index); |
+ actionBarItemsIntent.remove(index); |
+ } |
+ |
+ private int getIndexOfLayout(int type, LinearLayout item, LinearLayout setting) { |
+ int currentIndex = 0; |
+ for (int kidsPos = 0; kidsPos < setting.getChildCount(); kidsPos ++) { |
+ View view = setting.getChildAt(kidsPos); |
+ // Check whether is the item we are searching for. |
+ if (view.getId() == type && view != item) { |
+ currentIndex += 1; |
+ } |
+ } |
+ return currentIndex; |
+ } |
+ |
+ private void addActionBarItemDialogue() { |
Ian Wen
2016/02/09 00:14:15
This method shows a dialog, not "add". I would use
BigBossZhiling
2016/02/09 01:03:11
Done.
|
+ addActionBarItemDialogue = new Dialog(this, R.style.DialogTheme); |
+ addActionBarItemDialogue.setContentView(R.layout.dialogue_add_actionbar_item); |
+ addActionBarItemDialogue.setTitle("Add Action Bar Item"); |
+ addActionBarItemDialogue.findViewById(R.id.save_item).setOnClickListener(this); |
+ addActionBarItemDialogue.findViewById(R.id.cancel).setOnClickListener(this); |
+ addActionBarItemDialogue.findViewById(R.id.select_file).setOnClickListener(this); |
+ ((Spinner) addActionBarItemDialogue.findViewById(R.id.intent)) |
+ .setAdapter(new ArrayAdapter<String>(this, R.layout.row, R.id.item, getIntents())); |
+ imageInAddItemDialogue = Uri.parse( |
+ "android.resource://org.chromium.customtabsdemos/drawable/ic_action_name"); |
+ |
+ addActionBarItemDialogue.show(); |
+ } |
+ |
+ private String[] getIntents() { |
+ return new String[] {"Send", "Select Contact", "Add Event", "Camera"}; |
+ } |
+ |
+ private void sendUISettingToUIActivity() { |
+ Intent intent = new Intent(); |
+ intent.putExtra("packageName", mPackageSpinner.getSelectedItem().toString()); |
+ intent.putExtra("color", mToolbarColorSpinner.getSelectedItem().toString()); |
+ intent.putExtra("itemsDescription", actionBarItemsDescription); |
+ intent.putExtra("itemsImage", actionBarItemsImage); |
+ intent.putExtra("itemsIntent", actionBarItemsIntent); |
+ setResult(0, intent); |
+ } |
+ |
+ private void saveActionBarItem() { |
+ actionBarItemsDescription.add(((EditText) addActionBarItemDialogue |
+ .findViewById(R.id.description)).getText().toString()); |
+ actionBarItemsImage.add(imageInAddItemDialogue); |
+ actionBarItemsIntent.add(((Spinner) addActionBarItemDialogue |
+ .findViewById(R.id.intent)).getSelectedItem().toString()); |
+ } |
+ |
+ private void selectUISetting() { |
+ for (int position = 0; position < mToolbarColorSpinner.getAdapter().getCount(); |
+ position ++) { |
+ if (mToolbarColorSpinner.getAdapter().getItem(position).equals(color)) { |
+ mToolbarColorSpinner.setSelection(position); |
+ break; |
+ } |
+ } |
+ for (int position = 0; position < mPackageSpinner.getAdapter().getCount(); position ++) { |
+ if (mPackageSpinner.getAdapter().getItem(position).equals(packageName)) { |
+ mPackageSpinner.setSelection(position); |
+ break; |
+ } |
+ } |
+ |
+ displayActionBarItems(0, actionBarItemsDescription.size()); |
+ } |
+} |