This commit is contained in:
4aiman 2015-05-31 16:05:22 +03:00
commit 6ab679d710
12 changed files with 256 additions and 163 deletions

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@android:color/white" />
<LinearLayout
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/negative"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@android:color/white" />
<Button
android:id="@+id/positive"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@android:color/white" />
</LinearLayout>
</LinearLayout>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="2dip"
android:paddingLeft="12dip"
android:paddingRight="12dip"
android:paddingTop="6dip">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:text="@string/dialog_instruction" />
</LinearLayout>

View File

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/rta_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rta_dialog_title"
android:layout_gravity="center" />
android:layout_gravity="center"
android:text="@string/rta_dialog_title" />
<RatingBar
android:id="@+id/ratingBar"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_marginTop="16dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:numStars="5"
android:stepSize="1.0" />
@ -31,11 +31,11 @@
<EditText
android:layout_width="match_parent"
android:layout_height="64dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_height="64dp"
android:hint="@string/rate_description" />
<Button
@ -43,8 +43,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:enabled="false"
android:background="@android:color/transparent"
android:textColor="#00ced1"
android:text="@string/rate_submit" />
android:enabled="false"
android:text="@string/rate_submit"
android:textColor="#00ced1" />
</LinearLayout>

View File

@ -6,8 +6,8 @@
<string name="warning">Во время загрузки не закрывайте приложение. \nИгра запустится через несколько секунд&#8230;</string>
<string name="rm_old">Подготовка к обновлению&#8230;</string>
<string name="copy">Копирование&#8230;</string>
<string name="notification_title">Загрузка</string>
<string name="notification_description">Загрузка файлов игры&#8230;</string>
<string name="notification_title">Загрузка MultiCraft</string>
<string name="notification_description">Осталось меньше минуты&#8230;</string>
<!-- диалог оценки -->
<string name="rta_dialog_title">Оцените MultiCraft Beta — Бесплатный Майнер!</string>
@ -29,8 +29,8 @@
<string name="update_ignore">Игнорировать</string>
<!-- инструкция -->
<string name="dialog_instruction">Привет! После загрузки игры нажмите Play.\nЧтобы поставить блок, быстро тапните 2 раза там, куда хотите его поставить!\nЧтобы разъединить блоки в инвентаре, возьмите блок в руку и одновременно прикоснитесь пальцами к двум ячейкам. Вставится половина стопки. Нажмите на другую ячейку и вставится вторая половина!</string>
<string name="ok">Понял</string>
<string name="dialog_instruction">Привет! После загрузки игры нажмите Play.\nЧтобы поставить блок, нажмите на экран.\nЧтобы разрушить блок, удерживайте палец на экране.</string>
<string name="ok">Закрыть</string>
<string name="forget">Не напоминать</string>
<!-- недостаточно места -->

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="semi_transparent">#80000000</color>
</resources>

View File

@ -13,27 +13,27 @@
<!-- preparation for start -->
<string name="loading">Loading&#8230;</string>
<string name="warning">Do not stop the application while it is unpacking or updating. The game will start in few seconds.&#8230;</string>
<string name="warning">When unpacking, do not wrap application.\nGame will start in few second&#8230;</string>
<string name="rm_old">Preparing to update&#8230;</string>
<string name="copy">Copying&#8230;</string>
<string name="notification_title">Downloading</string>
<string name="notification_description">Downloading game data&#8230;</string>
<string name="notification_title">Downloading MultiCraft</string>
<string name="notification_description">Less than 1 minute&#8230;</string>
<!-- weak phone dialog -->
<string name="memory_title">Warning!</string>
<string name="memory_warning">Your device\'s memory is too low for seamless playing</string>
<string name="memory_continue">Continue</string>
<string name="memory_close">Close</string>
<string name="memory_lags">Lag is possible. Please don\'t rate this game badly.</string>
<string name="memory_lags">Lags are possible. Please don\'t rate this game badly.</string>
<!-- update dialog -->
<string name="update_yes">An update is available!</string>
<string name="update_yes">Update now!</string>
<string name="update_no">Remind me later&#8230;</string>
<string name="update_ignore">Ignore</string>
<!-- instruction dialog -->
<string name="dialog_instruction">Hello! After loading, select the world and press Play. \nTo place an item, tap and release where you want to put it (or quickly tap twice).\nTo split blocks inside inventory take the block and simultaneously touch the two cells; the first half will be inserted on first cell. Click on another cell for inserting the second half</string>
<string name="ok">Got it</string>
<string name="dialog_instruction">Hello! After game loading select the world and press Play. \nTo put a block tap on screen.\nTo destroy a block long tap on screen.</string>
<string name="ok">Close</string>
<string name="forget">Don\'t remind</string>
<!-- free space dialog -->

View File

@ -1,5 +1,9 @@
package com.MoNTE48.MultiCraft;
import static com.MoNTE48.MultiCraft.PreferencesHelper.TAG_SHORTCUT_CREATED;
import static com.MoNTE48.MultiCraft.PreferencesHelper.isCreateShortcut;
import static com.MoNTE48.MultiCraft.PreferencesHelper.saveSettings;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@ -14,7 +18,6 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
@ -28,7 +31,6 @@ import android.widget.TextView;
import com.MoNTE48.MultiCraft.Utilities.IUtilitiesCallback;
public class MainActivity extends Activity implements IUtilitiesCallback {
public static final String SHORTCUT_NAME = "shortcut";
private final String TAG = MainActivity.class.getName();
public final String FILES = "Files.zip";
public final String NOMEDIA = ".nomedia";
@ -49,18 +51,13 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
util = new Utilities(this);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
registerReceivers();
SharedPreferences settings = getSharedPreferences(SHORTCUT_NAME, 0);
boolean doNotExecute = settings.getBoolean("doNotExecute", false);
if (!doNotExecute)
addShortcut();
}
@Override
protected void onStart() {
super.onStart();
if (util.getTotalMemoryInMB() < 800 || util.getCoresCount() < 2) {
util.showMemoryDialog(MainActivity.this);
util.showMemoryDialog();
} else {
init();
}
@ -80,10 +77,7 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
}
private void addShortcut() {
SharedPreferences settings = getSharedPreferences(SHORTCUT_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("doNotExecute", true);
editor.apply();
saveSettings(this, TAG_SHORTCUT_CREATED, false);
Intent shortcutIntent = new Intent(getApplicationContext(),
MainActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN);
@ -100,6 +94,9 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
@SuppressWarnings("deprecation")
public void init() {
PreferencesHelper.loadSettings(this);
if (isCreateShortcut())
addShortcut();
mProgressTextView = (TextView) findViewById(R.id.progress_textView);
mProgressBar = (ProgressBar) findViewById(R.id.PB1);
Drawable draw;
@ -116,6 +113,11 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
checkVersion();
}
@Override
public void finishMe() {
finish();
}
private void registerReceivers() {
myBroadcastReceiver = new MyBroadcastReceiver();
myBroadcastReceiver_Update = new MyBroadcastReceiver_Update();
@ -153,7 +155,7 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
+ "games/MultiCraft II", unzipLocation + "tmp");
break;
case CURRENT:
startBetweenActivity();
startNativeActivity();
break;
}
} else {
@ -162,7 +164,7 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
}
}
private void startBetweenActivity() {
private void startNativeActivity() {
showSpinnerDialog(R.string.loading);
new Thread(new Runnable() {
public void run() {
@ -197,7 +199,7 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
public void onReceive(Context context, Intent intent) {
String result = intent.getStringExtra(UnzipService.EXTRA_KEY_OUT);
if ("Success".equals(result))
startBetweenActivity();
startNativeActivity();
}
}
@ -279,7 +281,7 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
Log.e(TAG, e.getMessage());
}
} else
util.showNotEnoughSpaceDialog(MainActivity.this);
util.showNotEnoughSpaceDialog();
}
private void copyAssets(String zipName) {
@ -311,9 +313,9 @@ public class MainActivity extends Activity implements IUtilitiesCallback {
@Override
protected void onDestroy() {
super.onDestroy();
dismissProgressDialog();
unregisterReceiver(myBroadcastReceiver);
unregisterReceiver(myBroadcastReceiver_Update);
super.onDestroy();
}
}

View File

@ -0,0 +1,44 @@
package com.MoNTE48.MultiCraft;
import android.content.Context;
import android.content.SharedPreferences;
public class PreferencesHelper {
private static final String SETTINGS = "settings";
public static final String TAG_SHORTCUT_CREATED = "createShortcut";
public static final String TAG_HELP_SHOWED = "showHelp";
private static boolean createShortcut, showHelp;
public static boolean isCreateShortcut() {
return createShortcut;
}
public static boolean isShowHelp() {
return showHelp;
}
public static void loadSettings(Context c) {
SharedPreferences settings = c.getSharedPreferences(SETTINGS,
Context.MODE_PRIVATE);
if (settings.getAll().size() == 0) {
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
createShortcut = true;
showHelp = true;
} else {
createShortcut = settings.getBoolean(TAG_SHORTCUT_CREATED, true);
showHelp = settings.getBoolean(TAG_HELP_SHOWED, true);
}
}
public static void saveSettings(Context c, String tag, boolean bool) {
SharedPreferences settings = c.getSharedPreferences(SETTINGS,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(tag, bool);
editor.commit();
}
}

View File

@ -48,7 +48,6 @@ public class UnzipService extends IntentService {
String file = intent.getStringExtra(EXTRA_KEY_IN_FILE);
String location = intent.getStringExtra(EXTRA_KEY_IN_LOCATION);
// Displays the progress bar for the first time.
mBuilder.setProgress(100, 0, false);
int id = 1;
mNotifyManager.notify(id, mBuilder.build());
int per = 0;
@ -71,8 +70,7 @@ public class UnzipService extends IntentService {
intentUpdate.addCategory(Intent.CATEGORY_DEFAULT);
intentUpdate.putExtra(EXTRA_KEY_UPDATE, progress);
sendBroadcast(intentUpdate);
mBuilder.setProgress(100, progress, false);
mNotifyManager.notify(id, mBuilder.build());
// mNotifyManager.notify(id, mBuilder.build());
FileOutputStream f_out = new FileOutputStream(location
+ ze.getName());
byte[] buffer = new byte[8192];
@ -93,9 +91,6 @@ public class UnzipService extends IntentService {
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
}
// mBuilder.setContentText(getString(R.string.complete));
// mBuilder.setProgress(0, 0, false);
// mNotifyManager.notify(id, mBuilder.build());
mNotifyManager.cancel(id);
Intent intentResponse = new Intent();
intentResponse.setAction(ACTION_MyIntentService);

View File

@ -1,5 +1,9 @@
package com.MoNTE48.MultiCraft;
import static com.MoNTE48.MultiCraft.PreferencesHelper.TAG_HELP_SHOWED;
import static com.MoNTE48.MultiCraft.PreferencesHelper.isShowHelp;
import static com.MoNTE48.MultiCraft.PreferencesHelper.saveSettings;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
@ -11,16 +15,18 @@ import mobi.MultiCraft.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.MoNTE48.RateME.RateThisApp;
@ -30,22 +36,25 @@ import com.winsontan520.wversionmanager.library.WVersionManager;
* Helpful utilities used in MainActivity
*/
public class Utilities {
private Button positive, negative;
private Dialog dialog;
public enum VERSIONS {
CURRENT, OLD
}
private final String TAG = Utilities.class.getName();
private Context mContext;
public static final String PREFS_NAME = "ShowFirstTime";
public final String STABLE_VER = "1.0.1";
/**
* Callback for MainActivity init method
*
* Callback for MainActivity init and finishMe methods
*/
public interface IUtilitiesCallback {
void init();
void finishMe();
}
private IUtilitiesCallback callerActivity;
@ -55,38 +64,45 @@ public class Utilities {
callerActivity = (IUtilitiesCallback) activity;
}
private void dialogInit(int panel, int positiveBtn, int negativeBtn,
int messageText) {
dialog = new Dialog(mContext);
dialog.requestWindowFeature(panel);
dialog.setContentView(R.layout.dialog_template);
positive = (Button) dialog.findViewById(R.id.positive);
negative = (Button) dialog.findViewById(R.id.negative);
TextView message = (TextView) dialog.findViewById(R.id.message);
positive.setText(positiveBtn);
negative.setText(negativeBtn);
message.setText(messageText);
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(R.color.semi_transparent));
}
@SuppressLint("InflateParams")
public void showHelpDialog() {
LayoutInflater inflater = LayoutInflater.from(mContext);
View messageView = inflater.inflate(R.layout.instruction_dialog, null,
false);
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setView(messageView);
builder.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RateThisApp.showRateDialogIfNeeded(mContext);
}
});
builder.setNegativeButton(R.string.forget,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String checkBoxResult = "checked";
SharedPreferences settings = mContext
.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("skipMessage", checkBoxResult);
editor.apply();
RateThisApp.showRateDialogIfNeeded(mContext);
}
});
SharedPreferences settings = mContext.getSharedPreferences(PREFS_NAME,
0);
String skipMessage = settings.getString("skipMessage", "NOT checked");
if (!"checked".equalsIgnoreCase(skipMessage))
builder.show();
dialogInit(Window.FEATURE_NO_TITLE, R.string.ok, R.string.forget,
R.string.dialog_instruction);
positive.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
RateThisApp.showRateDialogIfNeeded(mContext);
}
});
negative.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
saveSettings(mContext, TAG_HELP_SHOWED, false);
RateThisApp.showRateDialogIfNeeded(mContext);
}
});
if (isShowHelp()) {
dialog.show();
}
}
public void showVersionDialog() {
@ -103,43 +119,43 @@ public class Utilities {
.getResources().getText(R.string.update_ignore));
}
public void showMemoryDialog(final Activity activity) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(R.string.memory_title);
builder.setMessage(R.string.memory_warning);
builder.setPositiveButton(R.string.memory_continue,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(mContext, R.string.memory_lags,
Toast.LENGTH_SHORT).show();
callerActivity.init();
}
});
builder.setNegativeButton(R.string.memory_close,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
activity.finish();
}
});
builder.setCancelable(false);
builder.show();
public void showMemoryDialog() {
dialogInit(Window.FEATURE_OPTIONS_PANEL, R.string.memory_continue,
R.string.memory_close, R.string.memory_warning);
positive.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Toast.makeText(mContext, R.string.memory_lags,
Toast.LENGTH_SHORT).show();
callerActivity.init();
}
});
negative.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
callerActivity.finishMe();
}
});
dialog.show();
}
public void showNotEnoughSpaceDialog(final Activity activity) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(R.string.memory_title);
builder.setMessage(R.string.not_enough_space);
builder.setPositiveButton(R.string.space_ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
activity.finish();
}
});
builder.setCancelable(false);
builder.show();
public void showNotEnoughSpaceDialog() {
dialogInit(Window.FEATURE_OPTIONS_PANEL, R.string.space_ok,
R.string.memory_close, R.string.not_enough_space);
negative.setVisibility(View.GONE);
positive.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Toast.makeText(mContext, R.string.memory_lags,
Toast.LENGTH_SHORT).show();
callerActivity.init();
}
});
dialog.show();
}
public long getTotalMemoryInMB() {

View File

@ -8,6 +8,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.util.Log;
import android.widget.RatingBar;
@ -119,6 +120,8 @@ public class RateThisApp {
}
}
});
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(R.color.semi_transparent));
dialog.show();
}

View File

@ -1,8 +1,11 @@
package net.minetest.minetest;
import static com.MoNTE48.MultiCraft.PreferencesHelper.isShowHelp;
import java.util.concurrent.ScheduledExecutorService;
import android.app.NativeActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager;
@ -14,28 +17,53 @@ import com.MoNTE48.RateME.RateThisApp;
public class MtNativeActivity extends NativeActivity implements
IUtilitiesCallback {
private ScheduledExecutorService scheduler;
private int m_MessagReturnCode;
private String m_MessageReturnValue;
private Utilities util;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
init();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 101) {
if (resultCode == RESULT_OK) {
String text = data.getStringExtra("text");
m_MessagReturnCode = 0;
m_MessageReturnValue = text;
} else {
m_MessagReturnCode = 1;
}
}
}
@Override
public void init() {
m_MessagReturnCode = -1;
m_MessageReturnValue = "";
RateThisApp.onStart(this);
util = new Utilities(MtNativeActivity.this);
startDialogs();
}
@Override
public void finishMe() {
finish();
}
private void startDialogs() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Utilities util = new Utilities(MtNativeActivity.this);
util.showHelpDialog();
SharedPreferences settings = MtNativeActivity.this
.getSharedPreferences(Utilities.PREFS_NAME, 0);
String skipMessage = settings.getString("skipMessage",
"NOT checked");
if ("checked".equalsIgnoreCase(skipMessage)) {
if (!isShowHelp()) {
if (RateThisApp.shouldShowRateDialog()) {
RateThisApp
.showRateDialogIfNeeded(MtNativeActivity.this);
@ -87,19 +115,6 @@ public class MtNativeActivity extends NativeActivity implements
return getResources().getDisplayMetrics().heightPixels;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 101) {
if (resultCode == RESULT_OK) {
String text = data.getStringExtra("text");
m_MessagReturnCode = 0;
m_MessageReturnValue = text;
} else {
m_MessagReturnCode = 1;
}
}
}
static {
System.loadLibrary("openal");
System.loadLibrary("ogg");
@ -108,11 +123,4 @@ public class MtNativeActivity extends NativeActivity implements
System.loadLibrary("crypto");
}
private int m_MessagReturnCode;
private String m_MessageReturnValue;
@Override
public void init() {
}
}