From e6f8b141b0c28d2a93fb98387d0d494390dd73d6 Mon Sep 17 00:00:00 2001 From: pf45q8f3g <850847787@qq.com> Date: Tue, 31 Dec 2024 17:45:52 +0800 Subject: [PATCH] ADD file via upload --- .../AlarmAlertActivity.java | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 src%2FNotes-master%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fui/AlarmAlertActivity.java diff --git a/src%2FNotes-master%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fui/AlarmAlertActivity.java b/src%2FNotes-master%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fui/AlarmAlertActivity.java new file mode 100644 index 0000000..516134c --- /dev/null +++ b/src%2FNotes-master%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fui/AlarmAlertActivity.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + package net.micode.notes.ui; + + import android.app.Activity; + import android.app.AlertDialog; + import android.content.Context; + import android.content.DialogInterface; + import android.content.DialogInterface.OnClickListener; + import android.content.DialogInterface.OnDismissListener; + import android.content.Intent; + import android.media.AudioManager; + import android.media.MediaPlayer; + import android.media.RingtoneManager; + import android.net.Uri; + import android.os.Bundle; + import android.os.PowerManager; + import android.provider.Settings; + import android.view.Window; + import android.view.WindowManager; + + import net.micode.notes.R; + import net.micode.notes.data.Notes; + import net.micode.notes.tool.DataUtils; + + import java.io.IOException; + + + public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { + private long mNoteId; + private String mSnippet; + private static final int SNIPPET_PREW_MAX_LEN = 60; + MediaPlayer mPlayer; + + @Override + /** + * @Method onCreate + * @Date 2024/12/13 8:15 + * @param savedInstanceState + * @Author mazilin + * @Return void + * @Description + */ + protected void onCreate(Bundle savedInstanceState) { + /** + * Bundel 类似于 map,key-value存储 + * super 代表父类, 调用 onCreate 用于恢复上次结束的状态 + * mazilin 2024/12/13 8:39 + */ + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + + final Window win = getWindow(); + // 在屏幕锁定时显示 + win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + + // 锁屏时到闹钟提示时间后,点亮屏幕 + if (!isScreenOn()) { + win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); + } + + Intent intent = getIntent(); + + try { + mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); + mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); + // 超出长度则变为 substr + "..." + mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, + SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) + : mSnippet; + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return; + } + + mPlayer = new MediaPlayer(); + // 查找数据库中有没有 mNoteId 的便签, 如果有则激发对话框 + 闹钟提示音 + if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { + showActionDialog(); + playAlarmSound(); + } else { + finish(); + } + } + + private boolean isScreenOn() { + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + return pm.isScreenOn(); + } + + private void playAlarmSound() { + Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); + + int silentModeStreams = Settings.System.getInt(getContentResolver(), + Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { + mPlayer.setAudioStreamType(silentModeStreams); + } else { + mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + try { + mPlayer.setDataSource(this, url); + mPlayer.prepare(); + mPlayer.setLooping(true); + mPlayer.start(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void showActionDialog() {// TODO: 2024/1/2 可以模仿这个,写一个xxx条件下弹出来的Dialog + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + dialog.setTitle(R.string.app_name); + dialog.setMessage(mSnippet); + dialog.setPositiveButton(R.string.notealert_ok, this); + if (isScreenOn()) { + dialog.setNegativeButton(R.string.notealert_enter, this); + } + dialog.show().setOnDismissListener(this); + } + + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_NEGATIVE: + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, mNoteId); + startActivity(intent); + break; + default: + break; + } + } + + public void onDismiss(DialogInterface dialog) { + stopAlarmSound(); + finish(); + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop(); + mPlayer.release(); + mPlayer = null; + } + } + } + \ No newline at end of file