Chromium Code Reviews| 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()); |
| + } |
| +} |