Checkbox for home icon creation in create/edit dapp dialog

This commit is contained in:
Yaroslav Berezanskyi 2015-08-13 10:00:15 +03:00
parent 67e511a9c5
commit 7e71c318a2
5 changed files with 67 additions and 27 deletions

View File

@ -20,6 +20,8 @@
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<application
android:name=".app.SyngApplication"
android:allowBackup="true"

View File

@ -1,7 +1,6 @@
package io.syng.activity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
@ -23,6 +22,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
@ -30,7 +30,6 @@ import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bumptech.glide.Glide;
@ -152,22 +151,7 @@ public abstract class BaseActivity extends AppCompatActivity implements
Glide.with(this).load(R.drawable.two).into(header);
super.setContentView(mDrawerLayout);
showWarningDialogIfNeed();
}
private void showWarningDialogIfNeed() {
if (PrefsUtil.isFirstLaunch()) {
PrefsUtil.setFirstLaunch(false);
new AlertDialogWrapper.Builder(this)
.setTitle(R.string.warning_title)
.setMessage(R.string.warning_message)
.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
GeneralUtil.showWarningDialogIfNeed(this);
}
@ -202,7 +186,6 @@ public abstract class BaseActivity extends AppCompatActivity implements
if (SyngApplication.sCurrentProfile != null) {
mDApps = SyngApplication.sCurrentProfile.getDapps();
}
updateAppList(mSearchTextView.getText().toString());
}
@ -211,6 +194,10 @@ public abstract class BaseActivity extends AppCompatActivity implements
mHandler.postDelayed(mRunnable, delayMills);
}
protected void closeDrawer() {
mHandler.postDelayed(mRunnable, DRAWER_CLOSE_DELAY_SHORT);
}
protected void changeProfile(Profile profile) {
updateCurrentProfileName(profile.getName());
@ -334,7 +321,6 @@ public abstract class BaseActivity extends AppCompatActivity implements
mHandler.removeCallbacksAndMessages(null);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
@ -409,7 +395,7 @@ public abstract class BaseActivity extends AppCompatActivity implements
@Override
public void onDAppItemClick(Dapp dapp) {
onDAppClick(dapp);
closeDrawer(DRAWER_CLOSE_DELAY_SHORT);
closeDrawer();
}
@Override
@ -493,13 +479,19 @@ public abstract class BaseActivity extends AppCompatActivity implements
public void onPositive(MaterialDialog dialog) {
EditText dappNameEdit = (EditText) dialog.findViewById(R.id.dapp_name);
EditText dappUrlEdit = (EditText) dialog.findViewById(R.id.dapp_url);
CheckBox checkBox = (CheckBox) dialog.findViewById(R.id.dapp_home_icon);
boolean homeScreenIcon = checkBox.isChecked();
String url = dappUrlEdit.getText().toString();
String name = dappNameEdit.getText().toString();
if (Patterns.WEB_URL.matcher(url.replace("dapp://", "http://")).matches()) {
dapp.setName(dappNameEdit.getText().toString());
dapp.setName(name);
dapp.setUrl(url);
System.out.println(url);
SyngApplication.updateDapp(dapp);
initDApps();
if (homeScreenIcon) {
GeneralUtil.createHomeScreenIcon(BaseActivity.this, name, url);
}
dialog.hide();
} else {
Toast.makeText(BaseActivity.this, R.string.invalid_url, Toast.LENGTH_SHORT).show();
@ -548,6 +540,7 @@ public abstract class BaseActivity extends AppCompatActivity implements
dialog.getInputEditText().setText(profile.getName());
}
@Override
public void onDAppAdd() {
new MaterialDialog.Builder(this)
@ -561,12 +554,18 @@ public abstract class BaseActivity extends AppCompatActivity implements
public void onPositive(MaterialDialog dialog) {
EditText dappNameEdit = (EditText) dialog.findViewById(R.id.dapp_name);
EditText dappUrlEdit = (EditText) dialog.findViewById(R.id.dapp_url);
CheckBox checkBox = (CheckBox) dialog.findViewById(R.id.dapp_home_icon);
boolean homeScreenIcon = checkBox.isChecked();
String url = dappUrlEdit.getText().toString();
String name = dappNameEdit.getText().toString();
if (Patterns.WEB_URL.matcher(url.replace("dapp://", "http://")).matches()) {
Dapp dapp = new Dapp(dappNameEdit.getText().toString());
dapp.setUrl(dappUrlEdit.getText().toString());
Dapp dapp = new Dapp(name);
dapp.setUrl(url);
SyngApplication.addDapp(dapp);
initDApps();
if (homeScreenIcon) {
GeneralUtil.createHomeScreenIcon(BaseActivity.this, name, url);
}
dialog.hide();
} else {
Toast.makeText(BaseActivity.this, R.string.invalid_url, Toast.LENGTH_SHORT).show();
@ -590,7 +589,7 @@ public abstract class BaseActivity extends AppCompatActivity implements
intent.setData(Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
closeDrawer(DRAWER_CLOSE_DELAY_SHORT);
closeDrawer();
mSearchTextView.getText().clear();
}
}
@ -599,4 +598,5 @@ public abstract class BaseActivity extends AppCompatActivity implements
public void onNewProfile() {
showAccountCreateDialog();
}
}

View File

@ -33,6 +33,7 @@ public class MainActivity extends BaseActivity {
args.putString("url", intent.getDataString());
wvF.setArguments(args);
replaceFragment(wvF);
closeDrawer();
}
}

View File

@ -2,16 +2,53 @@ package io.syng.util;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import io.syng.R;
public final class GeneralUtil {
public static void hideKeyBoard(View view, Context context) {
if (view == null)
return;
InputMethodManager imm = (InputMethodManager)
context.getSystemService(Activity.INPUT_METHOD_SERVICE);
context.getApplicationContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
public static void createHomeScreenIcon(final Context context, final String name, final String url) {
Intent shortcutIntent = new Intent(Intent.ACTION_VIEW);
shortcutIntent.setData(Uri.parse(url));
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(context.getApplicationContext(), R.mipmap.ic_launcher));
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
context.sendBroadcast(addIntent);
}
public static void showWarningDialogIfNeed(final Context context) {
if (PrefsUtil.isFirstLaunch()) {
PrefsUtil.setFirstLaunch(false);
new AlertDialogWrapper.Builder(context.getApplicationContext())
.setTitle(R.string.warning_title)
.setMessage(R.string.warning_message)
.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
}
}

View File

@ -28,7 +28,7 @@
<string name="error_reading_file">Error reading specified file.</string>
<string name="invalid_wallet_password">Invalid wallet or password.</string>
<string name="invalid_url">Invalid url.</string>
<string name="invalid_url">Invalid url</string>
<string name="request_profile_password">Profile Password</string>
<string name="warning.message">This is PRE-ALPHA software and most likely contains numerous bugs. The layout, design, and functionality may change frequently. This also lacks numerous features that will be included in later versions. Using this software you agree that you hold yourself personally accountable for interacting with this software.</string>