/* * Tint Browser for Android * * Copyright (C) 2012 - to infinity and beyond J. Devauchelle and contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package com.seal.ui.preferences; import java.util.List; import android.app.Fragment; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.Switch; import android.widget.TextView; import com.seal.R; import com.seal.addons.Addon; import com.seal.controllers.Controller; import com.seal.ui.managers.UIFactory; public class AddonDetailsFragment extends Fragment { public static final String EXTRA_ADDON_ID = "EXTRA_ADDON_ID"; private View mContainer = null; private Addon mAddon; private TextView mName; private TextView mShortDesc; private TextView mLongDesc; private TextView mContact; private Switch mEnabled; private Button mPreferences; private TextView mCallbacks; private TextView mPermissions; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mContainer == null) { mContainer = inflater.inflate(R.layout.addon_details_fragment, container, false); mName = (TextView) mContainer.findViewById(R.id.AddonName); mShortDesc = (TextView) mContainer.findViewById(R.id.AddonShortDesc); mLongDesc = (TextView) mContainer.findViewById(R.id.AddonLongDesc); mContact = (TextView) mContainer.findViewById(R.id.AddonContact); mEnabled = (Switch) mContainer.findViewById(R.id.AddonEnabled); mPreferences = (Button) mContainer.findViewById(R.id.AddonPreferences); mEnabled.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mAddon.setEnabled(isChecked); } }); mPreferences.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAddon.showAddonSettingsActivity(); } }); mCallbacks = (TextView) mContainer.findViewById(R.id.AddonCallbacks); mPermissions = (TextView) mContainer.findViewById(R.id.AddonPermissions); } Bundle args = getArguments(); if (args != null) { mAddon = Controller.getInstance().getAddonManager().getAddons().get(args.getInt(EXTRA_ADDON_ID)); mName.setText(mAddon.getName()); mShortDesc.setText(mAddon.getShortDescription()); mLongDesc.setText(mAddon.getDescription()); mContact.setText(String.format(getString(R.string.AddonDetailsContact), mAddon.getContact())); mEnabled.setChecked(mAddon.isEnabled()); mPreferences.setEnabled(mAddon.hasSettingsPage()); fillCallbacksDetails(); fillPackagePermissions(); if (!UIFactory.isTablet(getActivity())) { // The current addon name is currently shown in tablet-type preferences activity / fragments. getActivity().setTitle(mAddon.getName()); } } return mContainer; } private void fillCallbacksDetails() { List<String> callbacks = mAddon.getUserReadbleCallbacks(); StringBuilder sb = new StringBuilder(); for (String callback : callbacks) { if (sb.length() > 0) { sb.append('\n'); } sb.append("• " + callback); } mCallbacks.setText(sb.toString()); } private void fillPackagePermissions() { ResolveInfo info = mAddon.getResolveInfo(); StringBuilder sb = new StringBuilder(); if ((info != null) && (info.serviceInfo != null) && (info.serviceInfo.packageName != null)) { try { PackageInfo packageInfo = getActivity().getPackageManager().getPackageInfo(info.serviceInfo.packageName, PackageManager.GET_PERMISSIONS); String[] permissions = packageInfo.requestedPermissions; if ((permissions != null) && (permissions.length > 0)) { for (int i = 0; i < permissions.length; i++) { if (sb.length() > 0) { sb.append('\n'); } sb.append("• " + permissions[i]); } } else { sb.append(getString(R.string.AddonDetailsPermissionsNone)); } mPermissions.setText(sb.toString()); } catch (NameNotFoundException e) { sb.append(getString(R.string.AddonDetailsUnableToGetPermissions)); } } else { sb.append(getString(R.string.AddonDetailsUnableToGetPermissions)); } mPermissions.setText(sb.toString()); } }