package com.tencent.tws.pluginhost.ui.view; import java.util.ArrayList; import java.util.Iterator; import java.util.Locale; import tws.component.log.TwsLog; import android.app.TwsActivity; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.TextUtils; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import com.tencent.tws.assistant.support.v4.app.Fragment; import com.tencent.tws.pluginhost.HostApplication; import com.tencent.tws.pluginhost.R; import com.tencent.tws.pluginhost.ui.HostHomeActivity.DisplayInfo; import com.tencent.tws.pluginhost.ui.MessageManagerActivity; import com.tencent.tws.pluginhost.ui.SettingsActivity; import com.tws.plugin.content.DisplayConfig; import com.tws.plugin.manager.PluginManagerHelper; public class MyWatchFragmentRevision extends Fragment implements OnClickListener { private static final String TAG = "rick_Print:MyWatchFragmentRevision"; private static final int FIX_LOCATION_BEGIN = 99; private Resources mResources; private LinearLayout mFragmentContainer; private RelativeLayout mWatchInfoLayout; private ImageView mWatchImg; private TextView mConnectText, mWatchNameText; private ImageView mNotiRedpointImg, mOtaRedpoint;// mUpgradeRedPointImageView // 只做初始化构造存储用,后面不可在用 private ArrayList<DisplayInfo> mDisplayInfos = new ArrayList<DisplayInfo>(); // 这个列表在安装和卸载插件的时候都需要维护 private ArrayList<WatchFragmentContentItem> mContentItems = new ArrayList<WatchFragmentContentItem>(); // 通知管理 和 设置是DM 固有的两项 private WatchFragmentContentItem mMessageMgrItem = null, mSettingsItem = null; private TextView mNotificationDescTextView; private int item_layout_height; private int item_paddingLeft; public MyWatchFragmentRevision(ArrayList<DisplayInfo> displayInfos) { super(); mDisplayInfos.addAll(displayInfos); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_my_watch_revision, container, false); mResources = getResources(); item_layout_height = (int) mResources.getDimension(R.dimen.HOST_HOME_FRAGMENT_revision_item_height); item_paddingLeft = (int) mResources.getDimension(R.dimen.HOST_HOME_FRAGMENT_revision_item_margin_left); initView(rootView); return rootView; } @Override public void onResume() { super.onResume(); TwsLog.d(TAG, "=========onResume========="); } @Override public void onStart() { super.onStart(); } /** * 注意这里的index是指fragment列表PaceWear这一列的后面开始计算 */ public void addContentItem(DisplayInfo info) { // 当前显示在首页My_Watch的内容暂只接收activity if (info.componentType != DisplayConfig.TYPE_ACTIVITY) { return; } if (!isEnabledDisplayInfo(info)) { TwsLog.e(TAG, "info is illegal(already exists), This will be ignored!"); return; } WatchFragmentContentItem item = new WatchFragmentContentItem(mFragmentContainer.getContext(), true); LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, item_layout_height); item.setPadding(item_paddingLeft, 0, 0, 0); item.setLayoutParams(lp); item.setBackgroundResource(R.drawable.list_selector_background);// R.drawable.dm_common_single_item_selector item.setImageViewImageDrawable(PluginManagerHelper.getPluginIcon(info.normalResName)); final ContextThemeWrapper context = getActivity(); final Resources res = context == null ? HostApplication.getInstance().getResources() : context.getResources(); final Locale locale = res.getConfiguration().locale; if ("zh".equals(locale.getLanguage())) { if ("HK".equals(locale.getCountry())) { item.setText(info.title_zh_HK); } else if ("TW".equals(locale.getCountry())) { item.setText(info.title_zh_TW); } else { item.setText(info.title_zh_CN); } } else { item.setText(info.title_en); } item.setOnClickListener(this); item.mStatKey = info.statKey; item.setActionClass(info.classId, info.componentType); item.setPluginPackageName(info.packageName); item.setLocation(info.location < 0 ? FIX_LOCATION_BEGIN - 1 : info.location); item.setVisibility(info.establishedDependOn ? View.VISIBLE : View.GONE); boolean insertRlt = false; int index = 0; for (index = 0; index < mContentItems.size(); index++) { if (item.getLocation() < mContentItems.get(index).getLocation()) { insertRlt = true; mContentItems.add(index, item); break; } } if (!insertRlt) { mContentItems.add(item); } mFragmentContainer.addView(item, index + 1);// +1是fragment顶部有一个固定的linelayout } public boolean isEnabledDisplayInfo(final DisplayInfo info) { if (info == null || TextUtils.isEmpty(info.packageName) || TextUtils.isEmpty(info.classId)) return false; for (WatchFragmentContentItem item : mContentItems) { if (info.packageName.equals(item.getPluginPackageName()) && info.classId.equals(item.getClassId())) { return false; } } return true; } public void printContentItemsInfo() { TwsLog.d(TAG, "============== begin printContentItemsInfo =============="); for (int index = 0; index < mContentItems.size(); index++) { final WatchFragmentContentItem item = mContentItems.get(index); TwsLog.d( TAG, "mContentItems[" + index + "] text is " + item.getTextViewText() + " Location is " + item.getLocation()); } TwsLog.d(TAG, "============== end printContentItemsInfo =============="); } private void initView(View rootView) { mFragmentContainer = (LinearLayout) rootView.findViewById(R.id.my_watch_revision_item_layout); mWatchInfoLayout = (RelativeLayout) rootView.findViewById(R.id.my_watch_revision_watch_info_layout); boolean hasOverlayActionbar = getActivity().getWindow().hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY); if (hasOverlayActionbar) { int top = (int) getResources().getDimension(R.dimen.tws_action_bar_height); if (getActivity() instanceof TwsActivity) { top += TwsActivity.getStatusBarHeight(); } mWatchInfoLayout.setPadding(0, top, 0, 0); } mWatchInfoLayout.setOnClickListener(this); mWatchImg = (ImageView) rootView.findViewById(R.id.my_watch_revision_watch_img); mWatchImg.setImageResource(R.drawable.twatch_dm_png_default); mConnectText = (TextView) rootView.findViewById(R.id.my_watch_revision_connect_text); mConnectText.setText("未连接"); mWatchNameText = (TextView) rootView.findViewById(R.id.my_watch_revision_watch_name); mWatchNameText.setText(R.string.watch_name); mOtaRedpoint = (ImageView) rootView.findViewById(R.id.my_watch_revision_redpoint_img); mOtaRedpoint.setImageResource(R.drawable.red_point); final Resources res = rootView.getContext().getResources(); final int thickSplitHeight = (int) res.getDimension(R.dimen.HOST_HOME_FRAGMENT_revision_item_big_divider); final Drawable thickSplitBackground = res.getDrawable(R.color.tws_stipple); // 注意:插件提供的Item 索引值应该是从1开始的,上面有一个mWatchInfoLayout if (mDisplayInfos != null) { for (DisplayInfo info : mDisplayInfos) { addContentItem(info); } printContentItemsInfo(); } // add 通知管理 mMessageMgrItem = new WatchFragmentContentItem(rootView.getContext()); mMessageMgrItem.setToNotify(); LayoutParams lp_notify = new LayoutParams(LayoutParams.MATCH_PARENT, item_layout_height); mMessageMgrItem.setPadding(item_paddingLeft, 0, 0, 0); mMessageMgrItem.setLayoutParams(lp_notify); mMessageMgrItem.setBackgroundResource(R.drawable.list_selector_background);// R.drawable.dm_common_single_item_selector mMessageMgrItem.setImageViewImageDrawable(R.drawable.home_item_notification_normal); mMessageMgrItem.setText(res.getString(R.string.message_mgr)); mMessageMgrItem.setOnClickListener(this); mMessageMgrItem.mSpecialFlg = WatchFragmentContentItem.ITEM_MESSAGE; mMessageMgrItem.setActionClass(MessageManagerActivity.class.getName(), DisplayConfig.TYPE_ACTIVITY); mMessageMgrItem.setLocation(FIX_LOCATION_BEGIN); mFragmentContainer.addView(mMessageMgrItem); // mContentItems.add(notifyMgr); //notifyMgr 作为DM固有的item可以不参与管理 mNotiRedpointImg = mMessageMgrItem.getNotifyImageView(); mNotificationDescTextView = mMessageMgrItem.getNotifyTextView(); // 添加分割线 - 粗的 insertSplit(mFragmentContainer, thickSplitHeight, 0, thickSplitBackground); // 最后添加Settings mSettingsItem = new WatchFragmentContentItem(rootView.getContext(), true); LayoutParams lp_settings = new LayoutParams(LayoutParams.MATCH_PARENT, item_layout_height); mSettingsItem.setPadding(item_paddingLeft, 0, 0, 0); mSettingsItem.setLayoutParams(lp_settings); mSettingsItem.setBackgroundResource(R.drawable.list_selector_background);// R.drawable.dm_common_single_item_selector mSettingsItem.setText(res.getString(R.string.settings)); mSettingsItem.setImageViewImageDrawable(R.drawable.home_item_my_settings); mSettingsItem.setOnClickListener(this); mSettingsItem.mSpecialFlg = WatchFragmentContentItem.ITEM_SETTINGS; mSettingsItem.setActionClass(SettingsActivity.class.getName(), DisplayConfig.TYPE_ACTIVITY); mSettingsItem.setLocation(FIX_LOCATION_BEGIN + 1); mFragmentContainer.addView(mSettingsItem); // mContentItems.add(settings); //Settings 作为DM固有的item可以不参与管理 } private void insertSplit(LinearLayout root, int height, int marginLeft, Drawable background) { TextView tv = new TextView(root.getContext()); tv.setBackground(background); LinearLayout.LayoutParams lp_split = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, height); lp_split.leftMargin = marginLeft; root.addView(tv, lp_split); } @Override public void onClick(View view) { if (view instanceof WatchFragmentContentItem) { final WatchFragmentContentItem item = (WatchFragmentContentItem) view; Intent intent = new Intent(); if (TextUtils.isEmpty(item.getPluginPackageName())) { intent.setClassName(getActivity(), item.getClassId()); } else { intent.setClassName(item.getPluginPackageName(), item.getClassId()); } switch (item.getComponentType()) { case DisplayConfig.TYPE_ACTIVITY: startActivity(intent); break; default: break; } if (item.mSpecialFlg == WatchFragmentContentItem.ITEM_MESSAGE && item.isNotify() && mNotiRedpointImg.getVisibility() == View.VISIBLE) { mNotiRedpointImg.setVisibility(View.INVISIBLE); } } else { switch (view.getId()) { case R.id.my_watch_revision_watch_info_layout: mOtaRedpoint.setVisibility(View.INVISIBLE); break; default: break; } } } @Override public void onDestroyView() { super.onDestroyView(); TwsLog.d(TAG, "=========onDestroyView========="); } public void removePlugin(String packageName) { if (TextUtils.isEmpty(packageName)) return; ArrayList<WatchFragmentContentItem> removeItems = new ArrayList<WatchFragmentContentItem>(); Iterator<WatchFragmentContentItem> iter = mContentItems.iterator(); removeItems.clear(); while (iter.hasNext()) { WatchFragmentContentItem item = iter.next(); if (packageName.equals(item.getPluginPackageName())) { mFragmentContainer.removeView(item); removeItems.add(item); } } if (0 < removeItems.size()) { mContentItems.removeAll(removeItems); } } public void unEstablishedDependOnForPlugin(String pid) { if (TextUtils.isEmpty(pid)) return; for (WatchFragmentContentItem item : mContentItems) { if (pid.equals(item.getPluginPackageName())) { item.setVisibility(View.GONE); } } } public void establishedDependOnForPlugin(String pid) { if (TextUtils.isEmpty(pid)) return; for (WatchFragmentContentItem item : mContentItems) { if (pid.equals(item.getPluginPackageName())) { item.setVisibility(View.VISIBLE); } } } }