mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
346 lines
14 KiB
Java
346 lines
14 KiB
Java
/*******************************************************************************
|
|
*
|
|
* 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;
|
|
}
|
|
}
|
|
}
|