Rename Settings*Activity to what they are, a Settings*Fragment.

This commit is contained in:
B. Petersen
2017-10-21 17:57:00 +02:00
parent c85fa85290
commit 6eee460532
9 changed files with 19 additions and 25 deletions
@@ -0,0 +1,345 @@
/*******************************************************************************
*
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* 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.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see http://www.gnu.org/licenses/ .
*
*******************************************************************************
*
* File: SettingsActivity.java
* Purpose: Basic settings dialog, has mainly items to open other settings pages
*
******************************************************************************/
package com.b44t.ui;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.R;
import com.b44t.messenger.UserConfig;
import com.b44t.messenger.browser.Browser;
import com.b44t.ui.ActionBar.ActionBar;
import com.b44t.ui.ActionBar.BaseFragment;
import com.b44t.ui.Adapters.BaseFragmentAdapter;
import com.b44t.ui.Cells.SettingsProfileCell;
import com.b44t.ui.Cells.HeaderCell;
import com.b44t.ui.Cells.ShadowSectionCell;
import com.b44t.ui.Cells.TextCheckCell;
import com.b44t.ui.Cells.TextDetailSettingsCell;
import com.b44t.ui.Cells.TextSettingsCell;
import com.b44t.ui.Components.LayoutHelper;
public class SettingsFragment extends BaseFragment {
// the list
private int profileRow, nameAndStatusRow;
private int notificationRow, backgroundRow, advRow, settingsShadowRow;
private int readReceiptsRow, passcodeRow;
private int aboutHeaderRow, aboutRow, inviteRow, helpRow, aboutShadowRow;
private int rowCount;
private static final int ROWTYPE_SHADOW = 0;
private static final int ROWTYPE_TEXT_SETTINGS = 1;
private static final int ROWTYPE_HEADER = 2;
private static final int ROWTYPE_DETAIL_SETTINGS = 3;
private static final int ROWTYPE_PROFILE = 4;
private static final int ROWTYPE_CHECK = 5;
private static final int ROWTYPE_COUNT = 6;
public final int MR_MDNS_DEFAULT_ENABLED = 1;
private ListView listView;
@Override
public boolean onFragmentCreate()
{
super.onFragmentCreate();
rowCount = 0;
profileRow = rowCount++;
nameAndStatusRow = rowCount++;
notificationRow = rowCount++;
backgroundRow = rowCount++;
passcodeRow = rowCount++;
readReceiptsRow = rowCount++;
advRow = rowCount++;
settingsShadowRow = rowCount++;
aboutHeaderRow = rowCount++;
aboutRow = rowCount++;
inviteRow = rowCount++;
helpRow = rowCount++;
aboutShadowRow = rowCount++;
return true;
}
@Override
public View createView(Context context)
{
// create action bar
// (we have also used an action bar menu for less frequently stuff (advanced, backup, account settings) but this needs to be explained -
// so, if possible, we will avoid this - form follows function)
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
actionBar.setAllowOverlayTitle(true);
actionBar.setTitle(context.getString(R.string.Settings));
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
@Override
public void onItemClick(int id) {
if (id == -1) {
finishFragment();
}
}
});
// create object to hold the whole view
fragmentView = new FrameLayout(context);
FrameLayout frameLayout = (FrameLayout) fragmentView;
frameLayout.setBackgroundColor(0xfff0f0f0);
// create the main layout list
ListAdapter listAdapter = new ListAdapter(context);
listView = new ListView(context);
listView.setDivider(null);
listView.setDividerHeight(0);
listView.setDrawSelectorOnTop(true);
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> adapterView, View view, final int i, long l) {
if (i == nameAndStatusRow) {
presentFragment(new SettingsNameFragment());
}
else if (i == passcodeRow) {
if (UserConfig.passcodeHash.length() > 0) {
presentFragment(new PasscodeActivity(PasscodeActivity.SCREEN2_ENTER_CODE2));
} else {
presentFragment(new PasscodeActivity(PasscodeActivity.SCREEN0_SETTINGS));
}
}
else if(i==readReceiptsRow )
{
int oldval = MrMailbox.getConfigInt("mdns_enabled", MR_MDNS_DEFAULT_ENABLED);
if( oldval == 1 ) {
MrMailbox.setConfig("mdns_enabled", "0");
}
else {
MrMailbox.setConfig("mdns_enabled", "1");
}
if (view instanceof TextCheckCell) {
((TextCheckCell) view).setChecked(oldval == 0);
}
}
else if (i == notificationRow) {
presentFragment(new SettingsNotificationsFragment());
}
else if (i == backgroundRow) {
presentFragment(new WallpapersActivity());
}
else if (i == advRow) {
presentFragment(new SettingsAdvFragment());
}
else if (i == aboutRow ) {
Intent intent2 = new Intent(getParentActivity(), WelcomeActivity.class);
intent2.putExtra("com.b44t.ui.IntroActivity.isAbout", true);
getParentActivity().startActivity(intent2);
}
else if (i == inviteRow ) {
try {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, MrMailbox.getInviteText());
getParentActivity().startActivity(Intent.createChooser(intent, ApplicationLoader.applicationContext.getString(R.string.InviteMenuEntry)));
} catch (Exception e) {
e.printStackTrace();
}
}
else if (i == helpRow ) {
String helpUrl = ApplicationLoader.applicationContext.getString(R.string.HelpUrl);
Browser.openUrl(getParentActivity(), helpUrl);
}
}
});
return fragmentView;
}
private class ListAdapter extends BaseFragmentAdapter {
private Context mContext;
public ListAdapter(Context context) {
mContext = context;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int i) {
return i == nameAndStatusRow ||
i==passcodeRow || i==readReceiptsRow || i == notificationRow || i == backgroundRow || i == advRow ||
i == aboutRow || i == inviteRow || i == helpRow;
}
@Override
public int getCount() {
return rowCount;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type = getItemViewType(i);
if( type == ROWTYPE_PROFILE ) {
if (view == null) {
view = new SettingsProfileCell(mContext);
}
((SettingsProfileCell) view).updateUserName();
}
else if (type == ROWTYPE_SHADOW) {
if (view == null) {
view = new ShadowSectionCell(mContext);
}
view.setBackgroundResource(i == aboutShadowRow? R.drawable.greydivider_bottom : R.drawable.greydivider);
}
else if (type == ROWTYPE_TEXT_SETTINGS) {
if (view == null) {
view = new TextSettingsCell(mContext);
view.setBackgroundColor(0xffffffff);
}
TextSettingsCell textCell = (TextSettingsCell) view;
if (i == passcodeRow) {
String val = UserConfig.passcodeHash.length() > 0? mContext.getString(R.string.Enabled) : mContext.getString(R.string.Disabled);
textCell.setTextAndValue(mContext.getString(R.string.Passcode), val, true);
}
else if (i == notificationRow) {
// a preview of the settings here would be rather complicated (all options may be overwritten in the
// chats) and either ambiguous or too long.
// We tried to display "On", "On/Off" (only groups disabled) and "..." (normal and groups disabled),
// but this throws more questions than answers (why do I get notifications for XYZ althoug groupis "off", why don't I get notification although "on", is ... an error)
// the control may look better if there is an preview value displayed, however, if this does not work: **Form follows function!**
textCell.setText(mContext.getString(R.string.NotificationsAndSounds), true);
}
else if (i == backgroundRow) {
textCell.setText(mContext.getString(R.string.ChatBackground), true);
}
else if (i == advRow) {
textCell.setText(mContext.getString(R.string.AdvancedSettings), false);
}
else if(i == inviteRow) {
textCell.setText(mContext.getString(R.string.InviteMenuEntry), true);
}
else if(i == helpRow) {
textCell.setText(mContext.getString(R.string.Help), false);
}
else if (i == nameAndStatusRow) {
textCell.setText(mContext.getString(R.string.NameAndStatus), true);
}
}
else if (type == ROWTYPE_HEADER) {
if (view == null) {
view = new HeaderCell(mContext);
view.setBackgroundColor(0xffffffff);
}
if (i == aboutHeaderRow) {
((HeaderCell) view).setText(mContext.getString(R.string.Info));
}
}
else if (type == ROWTYPE_DETAIL_SETTINGS) {
if (view == null) {
view = new TextDetailSettingsCell(mContext);
view.setBackgroundColor(0xffffffff);
}
TextDetailSettingsCell textCell = (TextDetailSettingsCell) view;
if (i == aboutRow) {
textCell.setTextAndValue(mContext.getString(R.string.AboutThisProgram), "v" + WelcomeActivity.getVersion(), true);
}
}
else if (type == ROWTYPE_CHECK ) {
if (view == null) {
view = new TextCheckCell(mContext);
view.setBackgroundColor(0xffffffff);
}
TextCheckCell textCell = (TextCheckCell) view;
if( i == readReceiptsRow ) {
textCell.setTextAndCheck(mContext.getString(R.string.SendNRcvReadReceipts),
MrMailbox.getConfigInt("mdns_enabled", MR_MDNS_DEFAULT_ENABLED)!=0, true);
}
}
return view;
}
@Override
public int getItemViewType(int i) {
if( i == profileRow ) {
return ROWTYPE_PROFILE;
}
else if ( i == settingsShadowRow || i == aboutShadowRow ) {
return ROWTYPE_SHADOW;
}
else if ( i==aboutRow ) {
return ROWTYPE_DETAIL_SETTINGS;
}
else if (i == aboutHeaderRow) {
return ROWTYPE_HEADER;
}
else if( i==readReceiptsRow ) {
return ROWTYPE_CHECK;
}
else {
return ROWTYPE_TEXT_SETTINGS;
}
}
@Override
public int getViewTypeCount() {
return ROWTYPE_COUNT;
}
@Override
public boolean isEmpty() {
return false;
}
}
}